/**
 *Copyright [2010] [lcj(caijunlu@gmail.com)]
 *Licensed under the Apache License, Version 2.0 (the "License");
 *you may not use this file except in compliance with the License. 
 *You may obtain a copy of the License at 
 *             http://www.apache.org/licenses/LICENSE-2.0 
 *Unless required by applicable law or agreed to in writing, 
 *software distributed under the License is distributed on an "AS IS" BASIS, 
 *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
 *either express or implied. See the License for the specific language governing permissions and limitations under the License
 */
package org.independent.servlet.session.util.thread;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * create a ThreadPoolExecutor to handle storing  sessions  on memcached
 * 
 * @invoke by {@link org.independent.servlet.session.manager.SessionsManager#remoteStore(org.independent.servlet.session.ServletSession)}
 * @see org.independent.servlet.session.util.thread.ThreadPoolTask
 * @author lcj
 * 
 */
public class ThreadPool {
	
	static private ThreadPoolExecutor threadPool = null;
	static {
		synchronized (ThreadPool.class) {
			if (threadPool == null)
				threadPool = new ThreadPoolExecutor(4, 12, 3000, TimeUnit.SECONDS,
						new ArrayBlockingQueue<Runnable>(12),new ThreadPoolExecutor.CallerRunsPolicy());
		}
	}
	static public void doRun(Runnable task) {
		threadPool.submit(task);
	}

}
